MYSQL de IN operator
IN
operator kan je zoeken in een lijst van opgegeven waarden.Probleem
Je weet precies welke waarden belangrijk zijn en je wil geen lange expressie met een heleboel OR
-operaties uitschrijven.
Oplossing
Met het sleutelwoord IN
kan je een lijst van alle aanvaardbare (of uitgesloten) waarden meegeven. Deze waarden zijn ingesloten in ronde haakjes.
Om de boeken geschreven door De Roover en Kaye te selecteren:
use ModernWays; select Familienaam, Titel, Verschijningsdatum from Boeken where Familienaam IN ('De Roover', 'Kaye');
De IN
operator is een afkorting voor een reeks vergelijkingen, verbonden met OR
-operatoren. Bovenstaande code doet net hetzelfde als:
use ModernWays; select Familienaam, Titel, Verschijningsdatum from Boeken where Familienaam = 'De Roover' OR Familienaam = 'Kaye';
Het hoeft dus niet te verbazen dat iets van de vorm ... IN ...
een booleaanse waarde oplevert. Het is een booleaanse expressie. Je kan de operator daarom ook combineren met logische operatoren. Bijvoorbeeld, als je alle boeken wilt die niet van De Roover of Kaye zijn:
use ModernWays; select Familienaam, Titel, Verschijningsdatum from Boeken where Familienaam not in ('De Roover', 'Kaye')
Merk op dat de laatste regel een meer leesbare versie is van where not (Familienaam in ('De Roover', 'Kaye'))
Je bent niet beperkt tot één gebruik van IN
. Je wil bijvoorbeeld alle boeken die niet zijn geschreven door De Roover of Kaye en die zijn verschenen in 2000 of 2001:
select Familienaam, Titel, Verschijningsdatum from Boeken where (Familienaam not in ('De Roover', 'Kaye')) and (Verschijningsdatum in ('2000', '2001'));
De ronde haakjes moeten er niet bij. Ze maken alleen de expressie duidelijker. Het is een goede praktijk ze er altijd bij te plaatsen.
Opdracht
Los volgende opdrachten op zonder uitdrukkelijk gebruik te maken van een vergelijkingsoperator of eenOR
.
0055__BoekenSelectIn.sql
: Alle boeken met als commentaarEen goed boek
ofEen interessant boek
.0056__BoekenSelectIn.sql
: Alle boeken die zowel uitgegeven zijn in Amsterdam of Utrecht als tot de categorie Wiskunde of Filosofie behoren.
Opmerking
Wildcards kan je enkel gebruiken in de LIKE clausule en niet in de IN. De volgende SELECT retourneert niets alhoewel er boeken uit de jaren 80 en 40 uit de vorige eeuw in de tabel Boeken zitten:
select Titel, Verschijningsjaar from Boeken where Verschijningsjaar in ('198_', '194_');
De underscores worden hier letterlijk opgevat en er zitten geen boeken van het jaar 198_ in de tabel. Hier zal je dus moeten terugvallen op booleaanse expressies (op basis van LIKE
) verbonden via OR
.
Opmerking
Het effect van hoofdletters en accenten hangt opnieuw af van het gebruik van de juiste collation na de waarden in de lijst.